/*
 * 2021/12/16	9:53
 *
 *	linux二进制分析	P32
 */

#include <stdio.h>

int foo(void)
{

}

int _start()
{
	foo();

	__asm__("leave");
}


/*
	gcc -nostdlib 03.c -o 03
	objdump -d 03

		03:     file format elf64-x86-64


		Disassembly of section .text:

		0000000000001000 <foo>:
			1000:       f3 0f 1e fa             endbr64 
			1004:       55                      push   %rbp
			1005:       48 89 e5                mov    %rsp,%rbp
			1008:       90                      nop
			1009:       5d                      pop    %rbp
			100a:       c3                      retq   

		000000000000100b <_start>:
			100b:       f3 0f 1e fa             endbr64 
			100f:       55                      push   %rbp
			1010:       48 89 e5                mov    %rsp,%rbp
			1013:       e8 e8 ff ff ff          callq  1000 <foo>
			1018:       c9                      leaveq 
			1019:       90                      nop
			101a:       5d                      pop    %rbp
			101b:       c3                      retq  
	

	strip 03
	
	objdump -d 03

		03:     file format elf64-x86-64


		Disassembly of section .text:

		0000000000001000 <.text>:
			1000:       f3 0f 1e fa             endbr64 
			1004:       55                      push   %rbp
			1005:       48 89 e5                mov    %rsp,%rbp
			1008:       90                      nop
			1009:       5d                      pop    %rbp
			100a:       c3                      retq   
			100b:       f3 0f 1e fa             endbr64 
			100f:       55                      push   %rbp
			1010:       48 89 e5                mov    %rsp,%rbp
			1013:       e8 e8 ff ff ff          callq  0x1000
			1018:       c9                      leaveq 
			1019:       90                      nop
			101a:       5d                      pop    %rbp
			101b:       c3                      retq 

	过程入口是每个函数的起点，因此通过检测过程序言（procedure prologue） ，
	可以帮助我们找到一个新函数的起始位置。如果使用了 gcc-fomit-frame-pointer 命令进行编译的话，入口就不太好识别了。 
*/
